好煩, Load Balancer 開起來之後一堆人在那邊掃目錄想打進來,到 Cloud Run 選想看的 Service 後可以點進 Logs 頁面:
可以看到用工具掃目錄的痕跡,這些東西讓我一覺醒來噴了 $19 台幣,我做的服務還真是熱門呢 :p 。不想因為這樣浪費額度,問了 Gemini 的解法是刪掉 Load Balancer 或下面的服務,沒有暫停的選項可用,看來以後要設計一個檢查額度是否用完然後直接把 Load Balancer 砍掉的方法,為了讓想法能付諸行動,今天趕快來熟悉 Cloud Run 吧。
好奇心使然,在 Cloud Run 建立服務時先使用範例的 hello 容器來測試服務是否正常,那這個服務內到底跑了什麼呢?
直接瀏覽 us-docker.pkg.dev/cloudrun/container/hello
會進入 Google Cloud 存放容器的地方,還可以看到開源的 Gemma :
先不要被 LLM 迷惑,來看看 hello 這個容器,有連結後可以直接用 docker 拉下來並且執行:
$ docker pull us-docker.pkg.dev/cloudrun/container/hello
$ docker run -it us-docker.pkg.dev/cloudrun/container/hello:latest
2025/08/17 04:05:20 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on port 8080
想知道容器裡面的環境最快的方法就是直接 docker exec
但 bash
並不存在於容器內:
$ docker exec -it 9ac81 bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
翻了一下 GitHub 可以找到這個 Hello 容器的原始碼。看 Dockerfile
可以發現它是基於 Scratch image,也就是裡面什麼都沒有。雖然看看原始碼就能知道這個 Hello 的行為,但好奇的你應該想知道在 Scratch image 下要怎麼拿到 Shell 吧?
當要在一個沒有動態函式庫的環境裡操作 Shell,最直觀的解法就是放一個靜態連結的 Shell 上去執行。但是要瀏覽目錄還需要 ls
或是 ps
之類的指令看看裡面有什麼。這個情況下可以拿一個靜態連結的 BusyBox 放上去。Debian package 就有可以直接下載 (Debian -- Package Download Selection -- busybox-static_1.37.0-6+b3_amd64.deb)。下載下來的 deb 檔案使用 dpkg-deb
解開就能拿到靜態連結的 BusyBox,然後放進容器內就可以執行:
花了點時間了解這個測試範例後,可以知道跑在 Cloud Run 內的服務要是個輕量且準備好發布的環境,不能只是個 Debug Server ,接下來將試著建立一個屬於自己的 Cloud Run Service!